#include "../source/Server.hpp"

// test for Buffer
//  int main()
//  {
//      char buffer[16];
//      Buffer s;
//      s.WriteAndPush("wml is handsome!", 10);
//      std::cout << s.ReadPosition() << std::endl;

//     s.ReadAndPop(buffer, 5);
//     std::cout << s.ReadPosition() << std::endl;
//     std::cout << buffer << std::endl;
//     return 0;
// }

// test for Socket
// int main()
// {
//     Socket s;
//     s.CreateServer(8080);
//     while (1)
//     {
//         s.Accept();
//         char buffer[1024];
//         // s.NonBlockRecv(buffer, 1024);
//         s.Recv(buffer, 1024);
//         sleep(1);
//     }
//     return 0;
// }

void OnConnected(const PtrConnection &conn)
{
    DBG_LOG("NEW CONNECTION:%p", conn.get());
}
void OnClosed(const PtrConnection &conn)
{
    DBG_LOG("CLOSE CONNECTION:%p", conn.get());
}
void OnMessage(const PtrConnection &conn, Buffer *buf)
{
    DBG_LOG("%s", buf->ReadPosition());
    buf->MoveReadOffest(buf->ReadAbleSize());
    std::string str = "Hello World";
    conn->Send(str.c_str(), str.size());
}
int main()
{
    TcpServer server(8080);
    server.SetThreadCount(2);
    server.EnableInactiveRelease(10);
    server.SetCloseCallback(OnClosed);
    server.SetConnectedCallback(OnConnected);
    server.SetMessageCallback(OnMessage);
    server.Start();
    return 0;
}